/**
 */
package ConnectorGenerator.ElementArchitecture.impl;

import ConnectorGenerator.Auxiliary.AuxiliaryPackage;

import ConnectorGenerator.Auxiliary.impl.AuxiliaryPackageImpl;

import ConnectorGenerator.CommunicationStyle.CommunicationStylePackage;

import ConnectorGenerator.CommunicationStyle.impl.CommunicationStylePackageImpl;

import ConnectorGenerator.ConnectorArchitecture.ConnectorArchitecturePackage;

import ConnectorGenerator.ConnectorArchitecture.impl.ConnectorArchitecturePackageImpl;

import ConnectorGenerator.ConnectorGeneratorPackage;

import ConnectorGenerator.DRD.DRDPackage;

import ConnectorGenerator.DRD.impl.DRDPackageImpl;

import ConnectorGenerator.ElementArchitecture.Attribute;
import ConnectorGenerator.ElementArchitecture.AttributeMapping;
import ConnectorGenerator.ElementArchitecture.ElementArchitecture;
import ConnectorGenerator.ElementArchitecture.ElementArchitectureFactory;
import ConnectorGenerator.ElementArchitecture.ElementArchitecturePackage;
import ConnectorGenerator.ElementArchitecture.ElementType;
import ConnectorGenerator.ElementArchitecture.FeatureMapping;
import ConnectorGenerator.ElementArchitecture.LocalBinding;
import ConnectorGenerator.ElementArchitecture.Port;
import ConnectorGenerator.ElementArchitecture.PortKind;
import ConnectorGenerator.ElementArchitecture.RealizedFeature;
import ConnectorGenerator.ElementArchitecture.RemoteBinding;
import ConnectorGenerator.ElementArchitecture.RemoteEndpoint;
import ConnectorGenerator.ElementArchitecture.SignatureConstraint;
import ConnectorGenerator.ElementArchitecture.SignatureVariable;
import ConnectorGenerator.ElementArchitecture.SubElement;

import ConnectorGenerator.Feature.FeaturePackage;

import ConnectorGenerator.Feature.impl.FeaturePackageImpl;

import ConnectorGenerator.Signature.SignaturePackage;

import ConnectorGenerator.Signature.impl.SignaturePackageImpl;

import ConnectorGenerator.impl.ConnectorGeneratorPackageImpl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class ElementArchitecturePackageImpl extends EPackageImpl implements ElementArchitecturePackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass realizedFeatureEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass subElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass featureMappingEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass attributeMappingEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass elementArchitectureEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass localBindingEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass attributeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass signatureConstraintEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass signatureVariableEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass elementTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass portEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass remoteBindingEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass remoteEndpointEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum portKindEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see ConnectorGenerator.ElementArchitecture.ElementArchitecturePackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private ElementArchitecturePackageImpl() {
		super(eNS_URI, ElementArchitectureFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link ElementArchitecturePackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static ElementArchitecturePackage init() {
		if (isInited) return (ElementArchitecturePackage)EPackage.Registry.INSTANCE.getEPackage(ElementArchitecturePackage.eNS_URI);

		// Obtain or create and register package
		ElementArchitecturePackageImpl theElementArchitecturePackage = (ElementArchitecturePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ElementArchitecturePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ElementArchitecturePackageImpl());

		isInited = true;

		// Obtain or create and register interdependencies
		ConnectorGeneratorPackageImpl theConnectorGeneratorPackage = (ConnectorGeneratorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ConnectorGeneratorPackage.eNS_URI) instanceof ConnectorGeneratorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ConnectorGeneratorPackage.eNS_URI) : ConnectorGeneratorPackage.eINSTANCE);
		AuxiliaryPackageImpl theAuxiliaryPackage = (AuxiliaryPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AuxiliaryPackage.eNS_URI) instanceof AuxiliaryPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AuxiliaryPackage.eNS_URI) : AuxiliaryPackage.eINSTANCE);
		DRDPackageImpl theDRDPackage = (DRDPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(DRDPackage.eNS_URI) instanceof DRDPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(DRDPackage.eNS_URI) : DRDPackage.eINSTANCE);
		CommunicationStylePackageImpl theCommunicationStylePackage = (CommunicationStylePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CommunicationStylePackage.eNS_URI) instanceof CommunicationStylePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CommunicationStylePackage.eNS_URI) : CommunicationStylePackage.eINSTANCE);
		SignaturePackageImpl theSignaturePackage = (SignaturePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SignaturePackage.eNS_URI) instanceof SignaturePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SignaturePackage.eNS_URI) : SignaturePackage.eINSTANCE);
		FeaturePackageImpl theFeaturePackage = (FeaturePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(FeaturePackage.eNS_URI) instanceof FeaturePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(FeaturePackage.eNS_URI) : FeaturePackage.eINSTANCE);
		ConnectorArchitecturePackageImpl theConnectorArchitecturePackage = (ConnectorArchitecturePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ConnectorArchitecturePackage.eNS_URI) instanceof ConnectorArchitecturePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ConnectorArchitecturePackage.eNS_URI) : ConnectorArchitecturePackage.eINSTANCE);

		// Create package meta-data objects
		theElementArchitecturePackage.createPackageContents();
		theConnectorGeneratorPackage.createPackageContents();
		theAuxiliaryPackage.createPackageContents();
		theDRDPackage.createPackageContents();
		theCommunicationStylePackage.createPackageContents();
		theSignaturePackage.createPackageContents();
		theFeaturePackage.createPackageContents();
		theConnectorArchitecturePackage.createPackageContents();

		// Initialize created meta-data
		theElementArchitecturePackage.initializePackageContents();
		theConnectorGeneratorPackage.initializePackageContents();
		theAuxiliaryPackage.initializePackageContents();
		theDRDPackage.initializePackageContents();
		theCommunicationStylePackage.initializePackageContents();
		theSignaturePackage.initializePackageContents();
		theFeaturePackage.initializePackageContents();
		theConnectorArchitecturePackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theElementArchitecturePackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(ElementArchitecturePackage.eNS_URI, theElementArchitecturePackage);
		return theElementArchitecturePackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getRealizedFeature() {
		return realizedFeatureEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRealizedFeature_Value() {
		return (EReference)realizedFeatureEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getRealizedFeature_FeatureName() {
		return (EAttribute)realizedFeatureEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSubElement() {
		return subElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSubElement_Name() {
		return (EAttribute)subElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSubElement_Type() {
		return (EReference)subElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFeatureMapping() {
		return featureMappingEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFeatureMapping_SubElement() {
		return (EReference)featureMappingEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFeatureMapping_FeatureName() {
		return (EAttribute)featureMappingEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAttributeMapping() {
		return attributeMappingEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getAttributeMapping_Atttribute() {
		return (EReference)attributeMappingEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getElementArchitecture() {
		return elementArchitectureEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_Type() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getElementArchitecture_Name() {
		return (EAttribute)elementArchitectureEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getElementArchitecture_CodeTemplate() {
		return (EAttribute)elementArchitectureEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_SubElements() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_LocalBindings() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_Features() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_SignatureConstraints() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(6);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_Attributes() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(7);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementArchitecture_RemoteBindings() {
		return (EReference)elementArchitectureEClass.getEStructuralFeatures().get(8);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLocalBinding() {
		return localBindingEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLocalBinding_SourceSubElement() {
		return (EReference)localBindingEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLocalBinding_SourcePort() {
		return (EReference)localBindingEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLocalBinding_DestinationSubElement() {
		return (EReference)localBindingEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLocalBinding_DestinationPort() {
		return (EReference)localBindingEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAttribute() {
		return attributeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttribute_Name() {
		return (EAttribute)attributeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSignatureConstraint() {
		return signatureConstraintEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSignatureConstraint_Port() {
		return (EReference)signatureConstraintEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSignatureConstraint_Signature() {
		return (EReference)signatureConstraintEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSignatureVariable() {
		return signatureVariableEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSignatureVariable_Name() {
		return (EAttribute)signatureVariableEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getElementType() {
		return elementTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getElementType_Name() {
		return (EAttribute)elementTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getElementType_Ports() {
		return (EReference)elementTypeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPort() {
		return portEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPort_Name() {
		return (EAttribute)portEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPort_Kind() {
		return (EAttribute)portEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getRemoteBinding() {
		return remoteBindingEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRemoteBinding_Endpoints() {
		return (EReference)remoteBindingEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getRemoteEndpoint() {
		return remoteEndpointEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRemoteEndpoint_Unit() {
		return (EReference)remoteEndpointEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRemoteEndpoint_Port() {
		return (EReference)remoteEndpointEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getPortKind() {
		return portKindEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ElementArchitectureFactory getElementArchitectureFactory() {
		return (ElementArchitectureFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		realizedFeatureEClass = createEClass(REALIZED_FEATURE);
		createEReference(realizedFeatureEClass, REALIZED_FEATURE__VALUE);
		createEAttribute(realizedFeatureEClass, REALIZED_FEATURE__FEATURE_NAME);

		subElementEClass = createEClass(SUB_ELEMENT);
		createEAttribute(subElementEClass, SUB_ELEMENT__NAME);
		createEReference(subElementEClass, SUB_ELEMENT__TYPE);

		featureMappingEClass = createEClass(FEATURE_MAPPING);
		createEReference(featureMappingEClass, FEATURE_MAPPING__SUB_ELEMENT);
		createEAttribute(featureMappingEClass, FEATURE_MAPPING__FEATURE_NAME);

		attributeMappingEClass = createEClass(ATTRIBUTE_MAPPING);
		createEReference(attributeMappingEClass, ATTRIBUTE_MAPPING__ATTTRIBUTE);

		elementArchitectureEClass = createEClass(ELEMENT_ARCHITECTURE);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__TYPE);
		createEAttribute(elementArchitectureEClass, ELEMENT_ARCHITECTURE__NAME);
		createEAttribute(elementArchitectureEClass, ELEMENT_ARCHITECTURE__CODE_TEMPLATE);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__SUB_ELEMENTS);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__LOCAL_BINDINGS);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__FEATURES);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__SIGNATURE_CONSTRAINTS);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__ATTRIBUTES);
		createEReference(elementArchitectureEClass, ELEMENT_ARCHITECTURE__REMOTE_BINDINGS);

		localBindingEClass = createEClass(LOCAL_BINDING);
		createEReference(localBindingEClass, LOCAL_BINDING__SOURCE_SUB_ELEMENT);
		createEReference(localBindingEClass, LOCAL_BINDING__SOURCE_PORT);
		createEReference(localBindingEClass, LOCAL_BINDING__DESTINATION_SUB_ELEMENT);
		createEReference(localBindingEClass, LOCAL_BINDING__DESTINATION_PORT);

		attributeEClass = createEClass(ATTRIBUTE);
		createEAttribute(attributeEClass, ATTRIBUTE__NAME);

		signatureConstraintEClass = createEClass(SIGNATURE_CONSTRAINT);
		createEReference(signatureConstraintEClass, SIGNATURE_CONSTRAINT__PORT);
		createEReference(signatureConstraintEClass, SIGNATURE_CONSTRAINT__SIGNATURE);

		signatureVariableEClass = createEClass(SIGNATURE_VARIABLE);
		createEAttribute(signatureVariableEClass, SIGNATURE_VARIABLE__NAME);

		elementTypeEClass = createEClass(ELEMENT_TYPE);
		createEAttribute(elementTypeEClass, ELEMENT_TYPE__NAME);
		createEReference(elementTypeEClass, ELEMENT_TYPE__PORTS);

		portEClass = createEClass(PORT);
		createEAttribute(portEClass, PORT__NAME);
		createEAttribute(portEClass, PORT__KIND);

		remoteBindingEClass = createEClass(REMOTE_BINDING);
		createEReference(remoteBindingEClass, REMOTE_BINDING__ENDPOINTS);

		remoteEndpointEClass = createEClass(REMOTE_ENDPOINT);
		createEReference(remoteEndpointEClass, REMOTE_ENDPOINT__UNIT);
		createEReference(remoteEndpointEClass, REMOTE_ENDPOINT__PORT);

		// Create enums
		portKindEEnum = createEEnum(PORT_KIND);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		FeaturePackage theFeaturePackage = (FeaturePackage)EPackage.Registry.INSTANCE.getEPackage(FeaturePackage.eNS_URI);
		AuxiliaryPackage theAuxiliaryPackage = (AuxiliaryPackage)EPackage.Registry.INSTANCE.getEPackage(AuxiliaryPackage.eNS_URI);
		SignaturePackage theSignaturePackage = (SignaturePackage)EPackage.Registry.INSTANCE.getEPackage(SignaturePackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		featureMappingEClass.getESuperTypes().add(theFeaturePackage.getFeatureValue());
		attributeMappingEClass.getESuperTypes().add(theFeaturePackage.getFeatureValue());
		elementArchitectureEClass.getESuperTypes().add(theAuxiliaryPackage.getFirstClassEntity());
		signatureVariableEClass.getESuperTypes().add(theSignaturePackage.getSignature());
		elementTypeEClass.getESuperTypes().add(theAuxiliaryPackage.getFirstClassEntity());

		// Initialize classes and features; add operations and parameters
		initEClass(realizedFeatureEClass, RealizedFeature.class, "RealizedFeature", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getRealizedFeature_Value(), theFeaturePackage.getFeatureValue(), null, "value", null, 1, 1, RealizedFeature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getRealizedFeature_FeatureName(), ecorePackage.getEString(), "featureName", null, 1, 1, RealizedFeature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(subElementEClass, SubElement.class, "SubElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSubElement_Name(), ecorePackage.getEString(), "name", null, 1, 1, SubElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSubElement_Type(), this.getElementType(), null, "type", null, 1, 1, SubElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(featureMappingEClass, FeatureMapping.class, "FeatureMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFeatureMapping_SubElement(), this.getSubElement(), null, "subElement", null, 1, 1, FeatureMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getFeatureMapping_FeatureName(), ecorePackage.getEString(), "featureName", null, 1, 1, FeatureMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(attributeMappingEClass, AttributeMapping.class, "AttributeMapping", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getAttributeMapping_Atttribute(), this.getAttribute(), null, "atttribute", null, 1, 1, AttributeMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(elementArchitectureEClass, ElementArchitecture.class, "ElementArchitecture", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getElementArchitecture_Type(), this.getElementType(), null, "type", null, 1, 1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getElementArchitecture_Name(), ecorePackage.getEString(), "name", null, 1, 1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getElementArchitecture_CodeTemplate(), ecorePackage.getEString(), "codeTemplate", null, 1, 1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_SubElements(), this.getSubElement(), null, "subElements", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_LocalBindings(), this.getLocalBinding(), null, "localBindings", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_Features(), this.getRealizedFeature(), null, "features", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_SignatureConstraints(), this.getSignatureConstraint(), null, "signatureConstraints", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_Attributes(), this.getAttribute(), null, "attributes", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementArchitecture_RemoteBindings(), this.getRemoteBinding(), null, "remoteBindings", null, 0, -1, ElementArchitecture.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(localBindingEClass, LocalBinding.class, "LocalBinding", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLocalBinding_SourceSubElement(), this.getSubElement(), null, "sourceSubElement", null, 0, 1, LocalBinding.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLocalBinding_SourcePort(), this.getPort(), null, "sourcePort", null, 1, 1, LocalBinding.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLocalBinding_DestinationSubElement(), this.getSubElement(), null, "destinationSubElement", null, 0, 1, LocalBinding.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLocalBinding_DestinationPort(), this.getPort(), null, "destinationPort", null, 1, 1, LocalBinding.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(attributeEClass, Attribute.class, "Attribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAttribute_Name(), ecorePackage.getEString(), "name", null, 1, 1, Attribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(signatureConstraintEClass, SignatureConstraint.class, "SignatureConstraint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getSignatureConstraint_Port(), this.getPort(), null, "port", null, 1, 1, SignatureConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSignatureConstraint_Signature(), theSignaturePackage.getSignature(), null, "signature", null, 1, 1, SignatureConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(signatureVariableEClass, SignatureVariable.class, "SignatureVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSignatureVariable_Name(), ecorePackage.getEString(), "name", null, 1, 1, SignatureVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(elementTypeEClass, ElementType.class, "ElementType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getElementType_Name(), ecorePackage.getEString(), "name", null, 1, 1, ElementType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getElementType_Ports(), this.getPort(), null, "ports", null, 0, -1, ElementType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(portEClass, Port.class, "Port", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getPort_Name(), ecorePackage.getEString(), "name", null, 1, 1, Port.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getPort_Kind(), this.getPortKind(), "kind", null, 1, 1, Port.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(remoteBindingEClass, RemoteBinding.class, "RemoteBinding", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getRemoteBinding_Endpoints(), this.getRemoteEndpoint(), null, "endpoints", null, 0, 1, RemoteBinding.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(remoteEndpointEClass, RemoteEndpoint.class, "RemoteEndpoint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getRemoteEndpoint_Unit(), this.getSubElement(), null, "unit", null, 0, 1, RemoteEndpoint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getRemoteEndpoint_Port(), this.getPort(), null, "port", null, 1, 1, RemoteEndpoint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(portKindEEnum, PortKind.class, "PortKind");
		addEEnumLiteral(portKindEEnum, PortKind.PK_PROVIDED);
		addEEnumLiteral(portKindEEnum, PortKind.PK_REQUIRED);
		addEEnumLiteral(portKindEEnum, PortKind.PK_REMOTE);
	}

} //ElementArchitecturePackageImpl
